package cz.vse.adventura.po1715.xburj54_bursa.hra;

import cz.vse.adventura.po1715.xburj54_bursa.hra.Kapsa;
import cz.vse.adventura.po1715.xburj54_bursa.hra.APříkaz;
import cz.vse.adventura.po1715.xburj54_bursa.hra.HraLupič;

/*******************************************************************************
 * Instance tridy {@code PříkazVezmi} predstavuje prikaz
 * k odebrani predmetu z aktualni mistnosti a jeho umisteni do kapes.
 * Aby byl prikaz proveden, musi byt zadan nazev predmetu,
 * ktery se v aktualni mistnosti vyskytuje, predmet musi byt
 * zvednutelny a v kapsach musi byt jeste volne misto.
 *
 * @author Jan Bursa
 * @version 1.02,  16.12.2010
 */
public class PříkazVezmi extends APříkaz
{
//== KONSTANTNI ATRIBUTY TRIDY =================================================    
//== PROMENNE ATRIBUTY TRIDY ===================================================
//== KONSTANTNI ATRIBUTY INSTANCI ==============================================
//== PROMENNE ATRIBUTY INSTANCI ================================================
//== NESOUKROME METODY TRIDY ===================================================

//##############################################################################
//== KONSTRUKTORY A TOVARNI METODY =============================================

   /***************************************************************************
     * Vytvoří instanci mající na starosti reakci na příkaz <b>vezmi</b>,
     * po jehož zadaní hráč sebere zadaný předmět.
     */
    PříkazVezmi()
    {
        super("Vezmi",
           "Příkaz odebere předmět zadaného názvu z aktuální místnosti a umístí jej do batohu.\n" +
           "Aby byl příkaz proveden, musí být: zadán název předmětu, který se v místnosti vyskytuje,\n" +
           "předmět musí byt zvednutelný a v batohu musí byt ještě volné místo.");
    }


//== ABSTRAKTNI METODY =========================================================
//== NESOUKROME METODY INSTANCI ================================================

    /***************************************************************************
     * Vezme z místnosti předmět zadaného názvu a umístí je do kapes;
     * nejprve však zkontroluje, zda byl vůbec zadán název předmětu,
     * který se má zvednout, zda je tento předmět zvednutelný a zda se další
     * předmět ještě vejde do kapes.
     *
     * @param  parametry Nazev zvedaneho predmetu
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length == 0) {
            return "\nNebyla zadán předmět, s nímž mám manipulovat.";   //==========>
        }
        String   nazev   = parametry[0];
        HraLupič hra = HraLupič.getHra();
        Místnost am = (Místnost) hra.getActualPlace();
        Předmět  predmet = am.zvedni( nazev );
        if (predmet == null ) {
        return "Zadaný předmět v místnosti není. ";// + nazev; //==========>
        }
        if (predmet == Předmět.PEVNÝ) {
        return "Zadaný předmět nejde zvednout. ";// + nazev;   //==========>
        }
        if ((predmet == Předmět.KLÍČ) && (PříkazPoužij.DVERE_ODEMCENY))
        {
        return "Dveře jsou již odemčeny. Klíč už není potřeba znovu brát";
        }
        if (predmet == Předmět.KAMÍNEK)
        {
        am.poloz(Předmět.KAMÍNEK);  //přidat do předmětů kamínek//==========>
        return "Rukou kamínek jen tak nevyndáte.";
        }
        Kapsa kapsa = (Kapsa) hra.getBag();
        if (! kapsa.pridej(predmet)) {
            am.poloz( predmet );
        return "Zadaný předmět nelze zvednout - máte sice velké kapsy, ale tohle už se tam opravdu nevejde";
        }                                                       //==========>
        return "Vzal(a) jste předmět: " + predmet.getName();   //==========>
    }


//== SOUKROME A POMOCNE METODY TRIDY ===========================================
//== SOUKROME A POMOCNE METODY INSTANCI ========================================
//== VNORENE A VNITRNI TRIDY ===================================================
//== TESTY A METODA MAIN =======================================================
}



